9b4f3b
@@ -24,8 +24,11 @@
 import org.apache.hadoop.hive.ql.exec.Description;
 import org.apache.hadoop.hive.ql.exec.UDF;
 import org.apache.hadoop.hive.serde2.io.BigDecimalWritable;
+import org.apache.hadoop.hive.serde2.io.ByteWritable;
 import org.apache.hadoop.hive.serde2.io.DoubleWritable;
+import org.apache.hadoop.hive.serde2.io.ShortWritable;
 import org.apache.hadoop.io.IntWritable;
+import org.apache.hadoop.io.LongWritable;
 
 /**
  * UDFRound.
@@ -38,6 +41,10 @@
 public class UDFRound extends UDF {
   private final BigDecimalWritable bigDecimalWritable = new BigDecimalWritable();
   private final DoubleWritable doubleWritable = new DoubleWritable();
+  private final LongWritable longWritable = new LongWritable();
+  private final IntWritable intWritable = new IntWritable();
+  private final ShortWritable shortWritable = new ShortWritable();
+  private final ByteWritable byteWritable = new ByteWritable();
 
   public UDFRound() {
   }
@@ -48,7 +55,7 @@
private DoubleWritable evaluate(DoubleWritable n, int i) {
       doubleWritable.set(d);
     } else {
       doubleWritable.set(BigDecimal.valueOf(d).setScale(i,
-          RoundingMode.HALF_UP).doubleValue());
+              RoundingMode.HALF_UP).doubleValue());
     }
     return doubleWritable;
   }
@@ -88,4 +95,41 @@
public BigDecimalWritable evaluate(BigDecimalWritable n, IntWritable i) {
     return evaluate(n, i.get());
   }
 
+  public LongWritable evaluate(LongWritable n) {
+    if (n == null) {
+      return null;
+    }
+    longWritable.set(BigDecimal.valueOf(n.get()).setScale(0,
+            RoundingMode.HALF_UP).longValue());
+    return longWritable;
+  }
+
+  public IntWritable evaluate(IntWritable n) {
+    if (n == null) {
+      return null;
+    }
+    intWritable.set(BigDecimal.valueOf(n.get()).setScale(0,
+            RoundingMode.HALF_UP).intValue());
+    return intWritable;
+  }
+
+  public ShortWritable evaluate(ShortWritable n) {
+    if (n == null) {
+      return null;
+    }
+    shortWritable.set(BigDecimal.valueOf(n.get()).setScale(0,
+            RoundingMode.HALF_UP).shortValue());
+    return shortWritable;
+  }
+
+  public ByteWritable evaluate(ByteWritable n) {
+    if (n == null) {
+      return null;
+    }
+    byteWritable.set(BigDecimal.valueOf(n.get()).setScale(0,
+            RoundingMode.HALF_UP).byteValue());
+    return byteWritable;
+  }
+
 }
+
